#ifndef __LINKLIST_H_
#define __LINKLIST_H_
#include<stddef.h>
#include"DynamicArray.h"

using ElementType=int;
class LinkList
{
public:
        LinkList();
        LinkList(const LinkList &list);
        LinkList& operator=(const LinkList &list);
        ~LinkList();



        //插入
        //尾插法
        void InsertTail(const ElementType &element);
        //头插法
        void InsertHead(const ElementType &element);
        //中间插
        void InsertByindex(size_t index,const ElementType &element);

        //删除
        //按位置删除
        void RemoveByindex(size_t index);
        //按值删除
        void RemoveByelement(const ElementType&element);
        //查找
        //按位置查
        ElementType* FindByIndex(size_t index);
        //按值查
        DArray:: DynamicArray FindElement(const ElementType& element);
        
        //修改
        //按位置修改
        void UpdateByindex(size_t index,const ElementType &elelment);
        void UpdateByElement(const ElementType &oldvalue,const ElementType &newvalue);

        //排序
        //冒泡排序
        void BubbleSort();
        //快速排序
        void Sort();
        //给倒数元素
        ElementType* GetReserveIndex(size_t index);

        //归并
        LinkList Merge(const LinkList &list);
        //交并补
        //链表的逆序
        void Reserve();
        //递归逆序
        void Reserve2();
       


        void show();




private:
    struct Node
    {
        Node(const ElementType &value)
        {
            this->value=value;
            next=nullptr;
        }
        ElementType value;//数据域
        Node *next;//指针域

    };
    void FastSort(Node *start,Node* end);
    Node *reserve(Node *node);
    Node *head;//头指针
    size_t size;//元素个数

};












#endif